home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
gfx
/
opal
/
obrotold.lzh
/
OBrotold.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-02-16
|
3KB
|
116 lines
/* OpalBrot.c try and do a fractal pattern on OpalVision */
#include <proto/all.h>
#include <opal/opallib.h>
#include <graphics/gfxbase.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h> /* lets give it something to REALLY Render */
#include <m68881.h>
#include "renderer.c"
#define DISP_W 736
#define DISP_H 476 /* hi-res screen */
__far UBYTE *Button = (UBYTE *)0xbfe001; /* Nasty */
__far UWORD *RButton= (UWORD *)0xdff016; /* read right button */
/* bit 10, use dff016 for right */
struct GfxBase *GfxBase;
/* external functions (int Renderer.c) */
/* prototypes go here */
BOOL Open_OpalScreen (ULONG Modes);
void Render_To_Opal (long Y, long Width, long Lines,
UBYTE *Red, UBYTE *Green, UBYTE *Blue, BOOL Chunky);
void Opal_Render_Finished (void);
void Close_Opal (void);
int Mandel(double,double,long);
int maxiter=133; /* max # of iterations */
UBYTE RedPlane[1000];
UBYTE GreenPlane[1000];
UBYTE BluePlane[1000];
void main (void)
{
register long x,y;
double mx,my,xmin,xmax,ymin,ymax; /* mandlebrot data */
double xstep,ystep;
int it;
char c;
xmin= -2.1; ymin= -1.3;
xmax= 0.8; ymax= 1.3;
GfxBase = (struct GfxBase *) OpenLibrary ("graphics.library",0);
if (!Open_OpalScreen (HIRES24|ILACE24|OVERSCAN24))
{ puts ("Can't open opalvision screeen\n");
exit (0);
}
/* entry point for multiple renders */
/* init the variables */
xstep=(xmax-xmin)/(double) DISP_W; /* increment for each pixel */
ystep=(ymax-ymin)/(double) DISP_H;
mx=xmin;
my=ymin;
for (y=0; y<DISP_H && (*Button &0x40); y++){ /* LINE LOOP STARTS */
mx=xmin; /* we must reset mx each line */
for (x=0; x<DISP_W; x++) /* PIXEL LOOP STARTS */
{
it=Mandel( mx,my, maxiter); /* do the brot calcs */
if (it==maxiter) {
RedPlane[x]=GreenPlane[x]=BluePlane[x]=0; }
else {
RedPlane[x] = it*15 ; /* set pixels */
GreenPlane[x] = 255-(it*3);
BluePlane[x] = it*7 ; }
mx+=xstep;
} /* PIXEL LOOP ENDS */
Render_To_Opal (y,DISP_W,1,RedPlane,GreenPlane,BluePlane,FALSE);
my += ystep; /* set for next line */
} /* LINE LOOP ENDS, WE RENDER FIRST */
Opal_Render_Finished ();
printf("done %d %d \n",x,y);
while (*Button &0x040) {
Delay (10L);
} /* wait for button before exit */
AmigaPriority();
printf(" Do you want to save it? (Y or N)");
c=getch();
if ( (c=='Y') || (c== 'y')) {
if ( !OScrn) OScrn=VScrn; /* if virtual */
SaveJPEG24( OScrn, "brot.jpg", NULL,75); /* save as jpeg */
}
printf("\n");
Close_Opal ();
}
int Mandel( cx, cy, maxit ) /* calculate mandelbrot iterations */
double cx, cy;
long maxit;
{
register long inum;
register double x, y, x2, y2,temp;
x = y = x2 = y2 = 0.0;
inum = 0L;
while( (inum < maxit)&& (( x2 + y2 )< 10000.0 ) ) {
temp = x2 - y2 + cx;
y *= 2.0 * x;
y += cy;
x = temp;
x2 = x * x;
y2 = y * y;
++inum;
/* (( x2 + y2 )< 10000.0 ) */
}
return( inum );
}